package com.softer.chengxin.dongle.controller;

import com.softer.chengxin.common.domin.Common;
import com.softer.chengxin.common.domin.CommonResult;
import com.softer.chengxin.common.domin.ManagerPageResult;
import com.softer.chengxin.common.domin.Page;
import com.softer.chengxin.common.enums.ResultEnum;
import com.softer.chengxin.dongle.domin.DongleInfoDTO;
import com.softer.chengxin.dongle.domin.DongleInfoVO;
import com.softer.chengxin.dongle.service.DongleService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpSession;
import java.util.ArrayList;
import java.util.List;

/**
 * 加密狗接口
 *
 * @author Gong Zhiyang
 * @date 2018/9/26
 */
@RestController
public class DongleController {

    @Autowired
    private DongleService dongleService;

    /**
     * 主管部门获取加密狗企业列表
     *
     * @param page  页面实体
     * @param name  企业名
     * @param state 状态（1基本信息提交，2已注册备案）
     * @return 企业列表
     */
    @PostMapping("/api/DongleInfo/loadCorpList")
    public ManagerPageResult getCorpList(Page page, String name, Integer state, HttpSession session) {
        String loginName = (String) session.getAttribute("loginName");
        if (StringUtils.isBlank(loginName)) {
            return new ManagerPageResult();
        }
        return dongleService.loadCorpList(page, name, state, loginName);
    }


    /**
     * 主管部门获取企业自有加密狗设备列表
     *
     * @param id 企业ID
     * @return 结果集
     */
    @PostMapping("/api/DongleInfo/load")
    public List<DongleInfoVO> loadDongleInfo(Integer id, HttpSession session) {
        String loginName = (String) session.getAttribute("loginName");
        if (StringUtils.isBlank(loginName)) {
            return new ArrayList<>();
        }
        return dongleService.loadDongleInfo(id, loginName);
    }

    /**
     * 获取企业加密狗设备列表
     *
     * @param page    页面信息
     * @param session 缓存
     * @return 列表
     */
    @PostMapping("/api/DongleInfo/loadQy")
    public ManagerPageResult loadQyDongleInfo(Page page, HttpSession session) {
        //查询企业ID
        Integer id = (Integer) session.getAttribute("ID");
        if (id == null) {
            return new ManagerPageResult();
        }
        return dongleService.loadQyDongleInfo(page, id);
    }

    /**
     * 加密设备删除
     *
     * @param ID 加密狗ID
     * @return 处理结果
     */
    @PostMapping("/api/DongleInfo/delete")
    public CommonResult deleteDongleInfo(Integer ID) {
        return dongleService.deleteDongleInfo(ID);
    }

    /**
     * 加密狗设备添加
     *
     * @param dongleInfoDTO 加密狗信息
     * @return 添加结果
     */
    @PostMapping("/api/DongleInfo/add")
    public CommonResult addDongleInfo(DongleInfoDTO dongleInfoDTO,
                                      HttpSession session) {
        String loginName = (String) session.getAttribute("loginName");
        if (StringUtils.isBlank(loginName)) {
            return new CommonResult(ResultEnum.FAIL.getCode(), "请重新登陆后操作");
        }
        if (StringUtils.isBlank(dongleInfoDTO.getKeyDog())) {
            return new CommonResult(ResultEnum.FAIL.getCode(), "请插入加密设备");
        }
        Integer isZy = dongleInfoDTO.getIsZy();
        //如果isZy=1，则为管理部门给企业绑定加密狗
        //如果isZy=0，则为企业给项目绑定加密狗
        if (Integer.parseInt(Common.ZERO) == isZy) {
            if (StringUtils.isBlank(dongleInfoDTO.getPid())) {
                return new CommonResult(ResultEnum.FAIL.getCode(), "请添加项目");
            }
            //查询企业ID
            Integer id = (Integer) session.getAttribute("ID");
            if (id == null) {
                return new CommonResult(ResultEnum.FAIL.getCode(), "请重新登陆后操作");
            }
            dongleInfoDTO.setCid(String.valueOf(id));
        }
        return dongleService.addDongleInfo(dongleInfoDTO, loginName);
    }

    /**
     * 修改加密狗状态
     *
     * @param id    令牌号
     * @param state 状态
     * @return 结果
     */
    @PostMapping(value = "/api/DongleInfo/update")
    public CommonResult update(@RequestParam("id") Integer id,
                               @RequestParam("state") Integer state) {
        return dongleService.update(id, state);
    }

    /**
     * 企业给项目绑定加密狗时，先校验加密狗
     *
     * @param code 加密狗
     * @return 校验结果
     */
    @PostMapping("/api/DongleInfo/check")
    public CommonResult check(String code) {
        return dongleService.check(code);
    }

}
